      <h1 class="entry-title entry-title-single" itemprop="headline">ABAP 四舍五入函数</h1>

    <div class="entry-content entry-content-single entry-content-aside" itemprop="text">
      <p><span class='wp_keywordlink'><a href="http://www.sapjx.com/tag/sap-abap" title="ABAP" target="_blank">ABAP</a></span> 中处理数据的<span class='wp_keywordlink'><a href="http://www.sapjx.com/tag/function" title="函数" target="_blank">函数</a></span>方法很多，其中涉及到<span class='wp_keywordlink_affiliate'><a href="http://www.sapjx.com/tag/rounding" title="查看四舍五入中的全部文章" target="_blank">四舍五入</a></span>的有两个（可能还有更多）：<b style="color:red">ROUND</b> 和 <b style="color:red">HR_NZ_ROUNDING_DECIMALS</b></p>
<p>前者位于Basis功能开发包 <b>SZME</b>  里面，在标准中用于计量单位的计算；</p>
<p>后者主要用于HR模块，位于 <b>PB43</b> 开发包，处理HR模块中的主数据。</p>
<p>&nbsp;<br />
<span id="more-279"></span><br />
<b>HR_NZ_ROUNDING_DECIMALS</b> <span class='wp_keywordlink'><a href="http://www.sapjx.com/tag/function" title="函数" target="_blank">函数</a></span>可以直接输入数值，然后在 <b>CONV_DEC</b> 参数中输入需要保留的小数点即可输出。</p>
<p><b>ROUND</b> <span class='wp_keywordlink'><a href="http://www.sapjx.com/tag/function" title="函数" target="_blank">函数</a></span>则有点灵活，可以通过 <b>SIGN</b> 参数( &#8216;+&#8217;，&#8217;-&#8217; )控制向上取舍，或者向下取舍。</p>
<p>例如：</p>
<p>输入 88.54350 ，如果SIGN = &#8216;+&#8217; ，保留2位小数，会得到: 88.55000；如果 SIGN = &#8216;-&#8217;，会得到：88.54000</p>
<p>输入 -88.54350，如果SIGN = &#8216;+&#8217; ，保留2位小数，会得到: -88.54000；如果 SIGN = &#8216;-&#8217;，会得到：-88.55000</p>
<p>&nbsp;</p>
<p>查看示例：</p>
<pre class="brush: abap;">

DATA : dat  TYPE p DECIMALS 9 VALUE '12.5445' ,
       dat1 TYPE p DECIMALS 9 .

DATA   dat2 TYPE p DECIMALS 9 VALUE '12.540'.

* 方法一
CALL FUNCTION 'HR_NZ_ROUNDING_DECIMALS'
  EXPORTING
    value_in                 = dat
    conv_dec                 = 2      " 设置保留几位小数
  IMPORTING
    value_out                = dat1
  EXCEPTIONS
    no_rounding_required     = 1
    decimals_greater_than_10 = 2
    rounding_error           = 3
    OTHERS                   = 4.

WRITE: /'方法一(保留2位小数)：'.
WRITE: / dat, ' => ' ,dat1.
WRITE: / '----------------------------------------------------'.

* 方法二
CALL FUNCTION 'ROUND'
  EXPORTING
    decimals      = 0       " 保留多少位小数
    input         = dat2
    sign          = '+'     " + 向上取舍 - 向下取舍 （负数也一样）
  IMPORTING
    output        = dat1    " 输出返回结果
  EXCEPTIONS
    input_invalid = 1
    overflow      = 2
    type_invalid  = 3
    OTHERS        = 4.

WRITE: /'方法二(保留0位小数)：'.
WRITE: / dat2, ' => ' ,dat1.
WRITE: / '----------------------------------------------------'.

</pre>
<p>&nbsp;</p>
<p>输出效果：</p>
<p><img src="http://www.sapjx.com/wp-content/uploads/2014/03/abap_function_round_demo.png" alt="abap_function_round_demo" width="429" height="110" class="alignnone size-full wp-image-280" /></p>
<p>&nbsp;</p>